import axios from 'axios'
import {Message} from '@arco-design/web-vue'
import {useUserStore} from '@/stores/user' // 导入 user store
import router from '@/router'

// 1. 创建 Axios 实例
const service = axios.create({
  baseURL: '/api',
  timeout: 10000 // 请求超时时间
})

// 2. 请求拦截器 (Request Interceptor)
service.interceptors.request.use(
  (config) => {
// 从 Pinia store 中获取 token
    const userStore = useUserStore()
    if (userStore.token) {
      config.headers.Authorization = `Bearer ${userStore.token}`
    }
    return config
  },
  (error) => {
    console.error('Request Error:', error) // for debug
    return Promise.reject(error)
  }
)

// 3. 响应拦截器 (Response Interceptor)
service.interceptors.response.use(
  (response) => {
    // 假设后端返回的数据结构是 { success: boolean, data: any, message: string }
    // 注意：在实际项目中，请与后端约定好统一的数据结构
    const res = response.data

    // 如果业务逻辑不是成功，则弹出错误提示
    if (res.code !== 0 && response.config.responseType !== 'blob') {
      Message.error(res.message || 'Error')
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      // 如果成功，则直接返回 data 字段
      // 注意：这里返回的是 res.data，也就是后端响应体中的 data 对象
      return res.data
    }
  },
  (error) => {
    // 处理 401 Token 失效错误
    if (error.response && error.response.status === 401) {
      const userStore = useUserStore()
      userStore.logout()
      Message.error('登录已过期，请重新登录')
      router.push('/login')
    } else {
      console.error('Response Error:' + error) // for debug
      Message.error(error.response?.data?.message || error.message || '网络错误')
    }
    return Promise.reject(error)
  }
)

export default service
